<?php
/**
 * @package php-font-lib
 * @link    https://github.com/PhenX/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace isszz\captcha\font\lib\table\type;
use isszz\captcha\font\lib\table\Table;

/**
 * `loca` font table.
 *
 * @package php-font-lib
 */
class Loca extends Table
{
	protected function _parse()
	{
		$font   = $this->getFont();
		$offset = $font->pos();

		$indexToLocFormat = $font->getData("head", "indexToLocFormat");
		$numGlyphs        = $font->getData("maxp", "numGlyphs");

		$font->seek($offset);

		$data = [];

		// 2 bytes
		if ($indexToLocFormat == 0) {
			$d   = $font->read(($numGlyphs + 1) * 2);
			$loc = unpack("n*", $d);

			for ($i = 0; $i <= $numGlyphs; $i++) {
				$data[] = isset($loc[$i + 1]) ?  $loc[$i + 1] * 2 : 0;
			}
		}

		// 4 bytes
		else {
			if ($indexToLocFormat == 1) {
				$d   = $font->read(($numGlyphs + 1) * 4);
				$loc = unpack("N*", $d);

				for ($i = 0; $i <= $numGlyphs; $i++) {
					$data[] = isset($loc[$i + 1]) ? $loc[$i + 1] : 0;
				}
			}
		}

		$this->data = $data;
	}

	public function _encode()
	{
		$font = $this->getFont();
		$data = $this->data;

		$indexToLocFormat = $font->getData("head", "indexToLocFormat");
		$numGlyphs        = $font->getData("maxp", "numGlyphs");
		$length           = 0;

		// 2 bytes
		if ($indexToLocFormat == 0) {
			for ($i = 0; $i <= $numGlyphs; $i++) {
				$length += $font->writeUInt16($data[$i] / 2);
			}
		}

		// 4 bytes
		else {
			if ($indexToLocFormat == 1) {
				for ($i = 0; $i <= $numGlyphs; $i++) {
					$length += $font->writeUInt32($data[$i]);
				}
			}
		}

		return $length;
	}
}